package com.ruoyi.module.mapper;

import com.ruoyi.module.domain.Order;
import com.ruoyi.module.po.OrderPo;
import com.ruoyi.module.vo.OrderVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
/**
 * 订单Mapper接口
 *
 * @author fubojin
 * @date 2024-12-06
 */
public interface OrderMapper
{
    /**
     * 查询订单
     *
     * @param id 订单主键
     * @return 订单
     */
    public Order selectOrderById(Long id);
    /**
     * 根据订单单号查询订单
     *
     * @param orderNo 订单主键
     * @return 订单
     */
    public Order selectOrderByOrderNo(@Param("orderNo") String orderNo);

    /**
     * 查询订单列表
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> selectOrderList(Order order);

    /**
     * 网页订单查询
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> selectOrderWebList(Order order);

    /**
     * 查询订单列表（销售订单）
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> distributeList(Order order);

    /**
     * 查询订单列表（订单明细）
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> detailedList(Order order);

    /**
     * 新增订单
     *
     * @param order 订单
     * @return 结果
     */
    public int insertOrder(Order order);

    /**
     * 修改订单
     *
     * @param order 订单
     * @return 结果
     */
    public int updateOrder(Order order);

    /**
     * 删除订单
     *
     * @param id 订单主键
     * @return 结果
     */
    public int deleteOrderById(Long id);

    /**
     * 批量删除订单
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteOrderByIds(Long[] ids);

    /**
     * 通过订单录入人查询订单
     * @param enterOrderUserId 录入人
     * @return
     */
    List<Order> orderByEnterUserIdList(Long enterOrderUserId);


    /**
     * 取消订单
     *
     * @param id 主键
     */
    void cancelOrder(Long id);

    /**
     * 确认收货
     *
     * @param id 主键
     */
    void confirmReceipt(Long id);

    /**
     * 分销订单-设置分销订单单号
     *
     * @param id         主键
     * @param deliveryNo deliveryNo
     */
    void setDeliveryNo(@Param("id") Long id, @Param("deliveryNo") String deliveryNo, @Param("userFreight") BigDecimal userFreight);

    /**
     * 确定收货
     * @param id 订单ID
     * @param enterUserType 客户订单类型
     */
    void setSignForReceipt(@Param("id") Long id, @Param("enterUserType") Integer enterUserType);

    /**
     * 改变订单评论状态
     * @param id 订单ID
     */
    void updateOrderEvaluate(@Param("id") Long id);

    /**
     * 订单结算
     */
    List<OrderVo> orderSettlement(OrderPo orderPo);

    void userTransfer(@Param("userId") Long userId, @Param("transferUserId") Long transferUserId, @Param("companyId") Long companyId);

    /**
     * 退货
     */
    void refundOrder(@Param("id") Long id);

}
